SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TWSABA_FLUJ_Q02]              
/*-------------------------------------------------------*/              
/*---Empresa              : OFISIS S.A.                --*/              
/*---Cliente              : SANTILLANA              --*/              
/*---Sistema              : Caja y Bancos              --*/              
/*---M+dulo               : Empresa                    --*/              
/*---Programa             : CALCULA SALDO INICIAL  --*/              
/*---Script               : TMSABA_M.SQL          --*/              
/*---Nombre SP            : SP_TWSABA_REPO_Q01   --*/              
/*---Desarrollado por     : EVP          --*/              
/*---Fecha Creacion   : 30/10/2000         --*/               
/*---Base Datos           : ORACLE          --*/              
/*---Versi+n              : 8.0                        --*/              
/*---Invoca a SP          :                            --*/              
/*-------------------------------------------------------*/              
/*-------------------------------------------------------*/              
/*---Modificado 1 por     : EVP          --*/              
/*---Fecha Modificaci+n   : 23/04/2001    --*/               
/*---Detalle Modificaci+n : A SQL          --*/              
/*-------------------------------------------------------*/              
/*-------------------------------------------------------*/              
/*---Modificado 2 por     : Carlos Marquez E   --*/              
/*---Fecha Modificaci+n   : 01/09/2005    --*/               
/*---Detalle Modificaci+n : manejo de Saldos Iniciales  --*/              
/*-------------------------------------------------------*/              
              
/*-------------------------------------------------------*/              
/*---Comentarios                                       --*/              
/*---                                                  --*/              
/*---                                                  --*/              
/*-------------------------------------------------------*/              
              
/*--------------------------------------------------------------------- */              
/* Drop Proc SP_TWSABA_REPO_Q01        */              
/* Grant All On SP_TWSABA_REPO_Q01 To Public     */              
              
--SP_TWSABA_REPO_Q01 '2005-07-31', 'O', 'O' , 'O'                 
              
/*----------------------------------------------------------------------*/              
@ISCO_EMPR TD_VC_002,          
@ISCO_MONE TD_VC_003,          
@ISNU_ANIO TD_VC_004,             
@ISNU_MESE TD_VC_002          
          
--EXEC SP_TWSABA_FLUJ_Q02 '01', 'DOL', '2007', '01'          
          
          
 As              
DECLARE              
@CSCO_EMPR TD_VC_002,              
@CSCO_BANC TD_VC_003,            
@CSCO_MONE TD_VC_003,             
@CSNU_CNTA_BANC  TD_VC_020,              
@VSAA_MINI TD_VC_004,              
@VSMM_MINI TD_VC_002,              
              
              
/*Variables*/              
@VNIM_INGR      NUMERIC(16,4),              
@VNIM_EGRE  NUMERIC(16,4),              
@VNIM_SALD_INIC NUMERIC(16,4),              
@VNIM_SALD_MINI NUMERIC(16,4),          
@VSTI_ORIG TD_VC_001,          
@VSTI_CAMB TD_VC_001,          
@VSCO_MONE_DEFA TD_VC_003,          
@VSCO_MONE_EXTR TD_VC_003,      
@VNFA_CAMB_MENS  TD_NU_015_006         
           
/*             
Create Table #TWSABA_REPO(               
    CO_EMPR CHAR(02) NULL,               
    CO_BANC VARCHAR(03) NULL,              
    NU_CNTA_BANC VARCHAR(20) NULL,              
    AA_BNCO VARCHAR(04) NULL,              
    MM_BNCO VARCHAR(02) NULL,              
    IM_SALD_INIC Numeric(16,4) NULL)               
              
Create Table #TWSABA_REPO_AUXI(               
CO_EMPR VARCHAR(02) NULL,              
CO_BANC VARCHAR(03) NULL,              
NU_CNTA_BANC VARCHAR(20) NULL,              
IM_SALD_INIC Numeric(16,4) NULL)     */
           
             
SELECT @VSTI_ORIG = TI_ORIG, @VSTI_CAMB = TI_CAMB, @VSCO_MONE_DEFA = CO_MONE_DEFA, @VSCO_MONE_EXTR = CO_MONE_EXTR           
FROM TMPARA_TESO          
WHERE CO_EMPR = @ISCO_EMPR          
   
  
     
SELECT @VNFA_CAMB_MENS = FA_CAMB_CMPR      
FROM TCFACT_PRME      
WHERE CO_MONE = @VSCO_MONE_EXTR                     
AND NU_ANNO = CONVERT(INT,@ISNU_ANIO)                
AND NU_MESE = CONVERT(INT,@ISNU_MESE)      
      
  
  
      
IF ISNULL(@VNFA_CAMB_MENS,0) = 0      
BEGIN      
      
select @VNFA_CAMB_MENS = (select TOP 1 FA_CAMB_CMPR            
FROM TCFACT_PRME            
WHERE CO_MONE = @VSCO_MONE_EXTR                           
AND ((NU_ANNO = @ISNU_ANIO  AND  NU_MESE <= @ISNU_MESE) OR (NU_ANNO < @ISNU_ANIO))                  
ORDER BY NU_ANNO DESC, NU_MESE DESC)      
      
END      
              
DECLARE CU_TMCNTA_BANC_Q01_2 CURSOR FOR               
SELECT CO_EMPR , CO_BANC ,  NU_CNTA_BANC, CO_MONE               
FROM TMCNTA_BANC          
WHERE CO_EMPR = @ISCO_EMPR            
AND CO_BANC NOT LIKE 'OFI%'             
              
BEGIN              
--DELETE FROM #TWSABA_REPO_AUXI              
--DELETE FROM #TWSABA_REPO              
              
-- PARA CALCULAR EL SALDO INICIAL DEL PRIMER PERIODO DE LAS CUENTAS              
Open CU_TMCNTA_BANC_Q01_2              
FETCH CU_TMCNTA_BANC_Q01_2 INTO @CSCO_EMPR , @CSCO_BANC , @CSNU_CNTA_BANC , @CSCO_MONE             
WHILE (@@FETCH_STATUS = 0)              
BEGIN              
               
 IF (@@FETCH_STATUS < 0)              
 Begin              
  RAISERROR 20001 "FIN DE ARCHIVO"              
CLOSE CU_TMCNTA_BANC_Q01_2              
  DEALLOCATE CU_TMCNTA_BANC_Q01_2              
  RETURN              
 End              
               
               
 SELECT @VSAA_MINI = MIN( AA_BNCO)              
 FROM TMSABA_MENS              
 WHERE RTRIM(CO_EMPR) = RTRIM(@CSCO_EMPR)              
 AND RTRIM(CO_BANC) = RTRIM(@CSCO_BANC)              
 AND RTRIM(NU_CNTA_BANC) = RTRIM(@CSNU_CNTA_BANC)              
               
 SELECT @VSMM_MINI = MIN( MM_BNCO)              
 FROM TMSABA_MENS              
 WHERE RTRIM(CO_EMPR) = RTRIM(@CSCO_EMPR)              
 AND RTRIM(CO_BANC) = RTRIM(@CSCO_BANC)              
 AND RTRIM(NU_CNTA_BANC) = RTRIM(@CSNU_CNTA_BANC)              
 AND RTRIM(AA_BNCO) = RTRIM(@VSAA_MINI)              
               
 IF @VSAA_MINI IS NOT NULL AND @VSMM_MINI IS NOT NULL               
 BEGIN               
       
              
  SELECT @VNIM_SALD_MINI =      
( CASE @CSCO_MONE WHEN @ISCO_MONE THEN T1.IM_SALD_INIC            
ELSE                 
 Round( Dbo.FN_TCFACT_CAMB_Q02(@CSCO_MONE, @ISCO_MONE, T1.AA_BNCO +'/' + T1.MM_BNCO +'/'+'01', T1.IM_SALD_INIC, @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_DEFA, @VSCO_MONE_EXTR, isnull((Dbo.FN_TCFACT_CAMB_MENS_Q01 (@ISCO_EMPR,T2.CO_MONE, @ISCO_MONE, CONVERT(INT, @VSAA_MINI), CONVERT(INT,@VSMM_MINI))),0)), 2)       
END )          
          
  FROM TMSABA_MENS T1, TMCNTA_BANC T2             
  WHERE RTRIM(T1.CO_EMPR) = RTRIM(@CSCO_EMPR)              
  AND RTRIM(T1.CO_BANC) = RTRIM(@CSCO_BANC)              
  AND RTRIM(T1.NU_CNTA_BANC) = RTRIM(@CSNU_CNTA_BANC)              
  AND RTRIM(T1.AA_BNCO) = RTRIM(@VSAA_MINI)              
  AND RTRIM(T1.MM_BNCO) = RTRIM(@VSMM_MINI)      
  AND T1.CO_EMPR = T2.CO_EMPR           
 AND T1.CO_EMPR = T2.CO_EMPR          
 AND T1.CO_BANC = T2.CO_BANC          
 AND T1.CO_BANC NOT LIKE 'OFI%'           
 AND T1.NU_CNTA_BANC = T2.NU_CNTA_BANC                
          
  
  
               
  INSERT INTO #TWSABA_REPO_AUXI( CO_EMPR, CO_BANC, NU_CNTA_BANC, IM_SALD_INIC)              
  VALUES( @CSCO_EMPR, @CSCO_BANC, @CSNU_CNTA_BANC, @VNIM_SALD_MINI)              
              
 END              
               
 FETCH CU_TMCNTA_BANC_Q01_2 INTO @CSCO_EMPR , @CSCO_BANC , @CSNU_CNTA_BANC, @CSCO_MONE              
END              
              
CLOSE CU_TMCNTA_BANC_Q01_2              
DEALLOCATE CU_TMCNTA_BANC_Q01_2              
             
             
 INSERT INTO #TWSABA_REPO ( CO_EMPR, CO_BANC, NU_CNTA_BANC, IM_SALD_INIC )              
 SELECT TCMOVI_BANC.CO_EMPR, TCMOVI_BANC.CO_BANC, TCMOVI_BANC.NU_CNTA_BANC,               
 (Isnull(Sum( Isnull( Round(Dbo.FN_TCFACT_CAMB_Q02(TMCNTA_BANC.CO_MONE, @ISCO_MONE, TCMOVI_BANC.FE_OPER,              
TCMOVI_BANC.IM_MOVI * ( PATINDEX(TCMOVI_BANC.TI_MOVI_BANC, 'I') - PATINDEX(TCMOVI_BANC.TI_MOVI_BANC, 'E')),               
@VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_DEFA, @VSCO_MONE_EXTR, ISNULL(    
(Dbo.FN_TCFACT_CAMB_MENS_Q01 (@ISCO_EMPR,TMCNTA_BANC.CO_MONE, @ISCO_MONE, YEAR(TCMOVI_BANC.FE_OPER), MONTH(TCMOVI_BANC.FE_OPER))), @VNFA_CAMB_MENS)), 2),0)),0))
 FROM TCMOVI_BANC, TMCNTA_BANC               
 WHERE TCMOVI_BANC.CO_EMPR = @ISCO_EMPR           
 AND TCMOVI_BANC.CO_EMPR = TMCNTA_BANC.CO_EMPR          
 AND TCMOVI_BANC.CO_BANC = TMCNTA_BANC.CO_BANC          
 AND TCMOVI_BANC.CO_BANC NOT LIKE 'OFI%'           
 AND TCMOVI_BANC.NU_CNTA_BANC = TMCNTA_BANC.NU_CNTA_BANC          
 AND (YEAR(TCMOVI_BANC.FE_OPER) < CONVERT(INT, @ISNU_ANIO)  OR (YEAR(TCMOVI_BANC.FE_OPER) = CONVERT(INT, @ISNU_ANIO) AND MONTH(TCMOVI_BANC.FE_OPER) <= CONVERT(INT, @ISNU_MESE)) )            
 AND TCMOVI_BANC.TI_SITU IN ('ACT', 'EXT')               
 GROUP BY TCMOVI_BANC.CO_EMPR, TCMOVI_BANC.CO_BANC, TCMOVI_BANC.NU_CNTA_BANC              

             
              
-- INSERTO CUENTAS QUE NO HAN TENIDO MOVIMIENTOS, ES DECIR AUN NO ESTAN GRABADAS EN TABLA #TWSABA REPO              
INSERT INTO #TWSABA_REPO( CO_EMPR, CO_BANC, NU_CNTA_BANC, IM_SALD_INIC )              
SELECT T2.CO_EMPR, T2.CO_BANC, T2.NU_CNTA_BANC, 0              
FROM TMCNTA_BANC T2              
WHERE NOT EXISTS              
(SELECT T1.CO_EMPR FROM #TWSABA_REPO T1              
WHERE RTRIM(T1.CO_EMPR) = RTRIM(T2.CO_EMPR)              
AND RTRIM(T1.CO_BANC) = RTRIM(T2.CO_BANC)               
AND RTRIM(T1.NU_CNTA_BANC) = RTRIM(T2.NU_CNTA_BANC))             
AND CO_EMPR = @ISCO_EMPR          
AND CO_BANC NOT LIKE 'OFI%'           
           
          
             
-- ACTUALIZO EL SALDO INICIAL MAS EL SALDO INICIAL DEL PRIMER PERIODO QUE SE ABRIO              
UPDATE #TWSABA_REPO               
SET #TWSABA_REPO.IM_SALD_INIC =  ( SELECT ISNULL(T2.IM_SALD_INIC,0) + ISNULL(#TWSABA_REPO.IM_SALD_INIC,0) FROM #TWSABA_REPO_AUXI T2              
         WHERE RTRIM(#TWSABA_REPO.CO_EMPR) = RTRIM(T2.CO_EMPR)              
         AND RTRIM(#TWSABA_REPO.CO_BANC) = RTRIM(T2.CO_BANC)              
         AND RTRIM(#TWSABA_REPO.NU_CNTA_BANC) = RTRIM(T2.NU_CNTA_BANC))              
WHERE EXISTS( SELECT T3.CO_EMPR              
FROM #TWSABA_REPO_AUXI T3              
WHERE #TWSABA_REPO.CO_EMPR = T3.CO_EMPR              
AND #TWSABA_REPO.CO_BANC = T3.CO_BANC              
AND #TWSABA_REPO.NU_CNTA_BANC = T3.NU_CNTA_BANC )              
           
--SELECT *FROM #TWSABA_REPO          
--SELECT *FROM #TWSABA_REPO_AUXI          
          
END -- FIN SP              
/*------------------------------ FIN ---------------------------------*/


GO
